package com.zenithmind.news.service;

import com.zenithmind.news.pojo.vo.NewsVO;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * 新闻缓存服务接口 - 遵循依赖倒置原则
 * 抽象缓存操作，隐藏具体的缓存实现细节
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface NewsCacheService {

    /**
     * 缓存新闻详情
     * 
     * @param newsId 新闻ID
     * @param newsVO 新闻VO
     * @param timeout 过期时间
     * @param timeUnit 时间单位
     */
    void cacheNewsDetail(String newsId, NewsVO newsVO, long timeout, TimeUnit timeUnit);

    /**
     * 获取缓存的新闻详情
     * 
     * @param newsId 新闻ID
     * @return 新闻VO，如果不存在返回null
     */
    NewsVO getCachedNewsDetail(String newsId);

    /**
     * 缓存热门新闻列表
     * 
     * @param newsList 新闻列表
     * @param timeout 过期时间
     * @param timeUnit 时间单位
     */
    void cacheHotNews(List<NewsVO> newsList, long timeout, TimeUnit timeUnit);

    /**
     * 获取缓存的热门新闻列表
     * 
     * @return 新闻列表，如果不存在返回null
     */
    List<NewsVO> getCachedHotNews();

    /**
     * 增加新闻阅读量
     * 
     * @param newsId 新闻ID
     * @return 增加后的阅读量
     */
    Long incrementViewCount(String newsId);

    /**
     * 删除新闻相关缓存
     * 
     * @param newsId 新闻ID
     */
    void evictNewsCache(String newsId);

    /**
     * 清除所有新闻缓存
     */
    void evictAllNewsCache();

    /**
     * 缓存用户行为偏好
     * 
     * @param userId 用户ID
     * @param preferences 偏好数据
     * @param timeout 过期时间
     * @param timeUnit 时间单位
     */
    void cacheUserPreferences(String userId, Object preferences, long timeout, TimeUnit timeUnit);

    /**
     * 获取缓存的用户偏好
     * 
     * @param userId 用户ID
     * @return 偏好数据，如果不存在返回null
     */
    Object getCachedUserPreferences(String userId);
}
